package com.youlai.boot.modules.tp.service;

import com.youlai.boot.modules.tp.dto.query.DateRangeQuery;
import com.youlai.boot.modules.tp.dto.response.SupplyChainDashboardVO;

import java.time.LocalDate;
import java.util.List;

/**
 * 供应链看板服务接口
 *
 * @author Jason
 * @since 2025-06-04
 */
public interface SupplyChainDashboardService {

    /**
     * 获取供应链看板完整数据
     *
     * @param dateRange 日期范围
     * @return 供应链看板数据
     */
    SupplyChainDashboardVO getDashboardData(DateRangeQuery dateRange);

    /**
     * 获取概览指标
     *
     * @param reportDate 报告日期
     * @return 概览指标
     */
    SupplyChainDashboardVO.OverviewMetrics getOverviewMetrics(LocalDate reportDate);

    /**
     * 获取库存分析数据
     *
     * @param reportDate 报告日期
     * @return 库存分析数据
     */
    SupplyChainDashboardVO.InventoryAnalysis getInventoryAnalysis(LocalDate reportDate);

    /**
     * 获取周转分析数据
     *
     * @param dateRange 日期范围
     * @return 周转分析数据
     */
    SupplyChainDashboardVO.TurnoverAnalysis getTurnoverAnalysis(DateRangeQuery dateRange);

    /**
     * 获取目标达成数据
     *
     * @param reportDate 报告日期
     * @return 目标达成数据
     */
    SupplyChainDashboardVO.TargetAchievement getTargetAchievement(LocalDate reportDate);

    /**
     * 获取店铺表现排行
     *
     * @param reportDate 报告日期
     * @param sortBy     排序字段
     * @param limit      数量限制
     * @return 店铺表现列表
     */
    List<SupplyChainDashboardVO.StorePerformance> getStorePerformance(LocalDate reportDate, String sortBy, Integer limit);

    /**
     * 获取库存预警信息
     *
     * @param reportDate 报告日期
     * @param alertLevel 预警级别
     * @return 库存预警列表
     */
    List<SupplyChainDashboardVO.InventoryAlert> getInventoryAlerts(LocalDate reportDate, String alertLevel);

    /**
     * 获取趋势数据
     *
     * @param dateRange  日期范围
     * @param trendType  趋势类型
     * @return 趋势数据
     */
    SupplyChainDashboardVO.TrendData getTrendData(DateRangeQuery dateRange, String trendType);

    /**
     * 刷新数据
     */
    void refreshData();
} 